# explode 这个爆炸方法只能处理 列表、 元组、 Series 和 numpy 的 ndarray 的类型
# 使用 explode 实现 pandas 列转行的 2 个常用技巧
# 某案例链接：https://blog.csdn.net/lys_828/article/details/106302278
# 案例集：将分组名称插入本组内容之前
import pandas as pd

df1 = pd.DataFrame(
    data={
        "程序员": ["小王", "小码哥", "小东哥"],
        "爱好": [
            ["敲代码", "打篮球", "玩游戏", "喝奶茶"],
            ["敲代码", "打篮球", "看电影", "刷剧", "敲代码"],
            ["打篮球", "玩游戏", "睡觉", "遛狗", "健身"]
        ]
    }
)
# print(df1)
# 爆炸
df1 = df1.explode("爱好")
# print(df1)
# 但列表有重复的值，就可能导致爆炸出来的行存在重复行，如上面小码哥出现了两次敲代码。
# 所以一般我们会在后面跟一个去重的方法。
df1 = df1.drop_duplicates()
print(df1)

# 第二种类型
df2 = pd.DataFrame(
    data={
        "程序员": ["小王", "小码哥", "小东哥"],
        "爱好": [
            "敲代码, 打篮球, 玩游戏, 喝奶茶",
            "敲代码, 打篮球, 看电影, 刷剧, 敲代码",
            "打篮球, 玩游戏, 睡觉, 遛狗, 健身"
        ]
    }
)
# print(df2)

# 改数据类型
# df2["爱好"] = df2["爱好"].str.split(", ")
df2["爱好"] = df2["爱好"].apply(lambda d: d.split(", "))
# print(df2)

# 再进行爆炸
df2 = df2.explode("爱好").drop_duplicates()
print(df2)
